BOJ_1351_무한 수열

재귀(Recursion)를 사용해서 수열의 값을 구하는 문제

재귀를 떠올렸다가 N이 1012인 걸 보고 망설였다

재귀 함수의 시간복잡도를 구할 때는 예시를 적어보고 파악한다고 한다
이 문제의 경우, n을 매번 P나 Q로 나누기 때문에 2라고 가정해도 log로 줄어들게 된다

따라서 연산 횟수가 O(log N)이라고 추측할 수 있고,
이에 따라 재귀 함수를 사용할 수 있다

from collections import defaultdict  
  
N, P, Q = map(int, input().split())  
  
num1 = 1  
num2 = 1  
  
def dfs(n, p, q, memo):  
    if memo[n] > 0:  
        return memo[n]  
  
    memo[n] = dfs(n // p, p, q, memo) + dfs(n // q, p, q, memo)  
    return memo[n]  
  
  
memo = defaultdict(int)  
memo[0] = 1  
  
res = dfs(N, P, Q, memo)  
print(res)